#ifndef CLINK_ROUTER_IROUTEHANDLER_H
#define CLINK_ROUTER_IROUTEHANDLER_H

#include <Poco/Net/HTTPServerRequest.h>
#include <Poco/Net/HTTPServerResponse.h>
#include <map>
#include <string>
#include "../CLink_Export.h"

namespace CLink
{
namespace Router
{

struct CLINK_CLASS RequestContext
{
    Poco::Net::HTTPServerRequest &request;     // HTTP请求对象
    Poco::Net::HTTPServerResponse &response;   // HTTP响应对象
    std::map<std::string, std::string> dynamicParams; // 路由参数
    std::map<std::string, std::string> queryParams; // 查询参数
	std::map<std::string, std::string> midwareParams; // form参数
};

/**
 * @brief 路由处理器接口
 *
 * 定义了路由处理器的基本接口，所有具体的路由处理器都需要实现这个接口。
 * 采用策略模式，允许在运行时切换不同的路由处理策略。
 */
class CLINK_CLASS IRouteHandler
{
public:
    virtual ~IRouteHandler() = default;

    /**
     * @brief 处理HTTP请求
     * @param request Poco HTTP请求对象
     * @param response Poco HTTP响应对象
     * @return 如果请求被处理返回true，否则返回false
     */
    virtual bool handle(RequestContext &context) = 0;

    /**
     * @brief 检查路由是否匹配请求
     * @param context 请求上下文，包含请求、响应和路由参数
     * @return 如果路由匹配返回true，否则返回false
     */
    virtual bool matches(const RequestContext &context) const = 0;

    /**
     * @brief 获取路由优先级
     * @return 路由优先级，数字越大优先级越高
     */
    virtual int getPriority() const = 0;
};

} // namespace Router
} // namespace CLink

#endif // CLINK_ROUTER_IROUTEHANDLER_H